// pages/sign/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // isShow Post , for passCheck
    showPost: true,

    // 用户数据，用于清空表单
    user: {
      stuName: '',
      stuId: '',
      stuPhone: '',
      stuAcademy: '',
      stuClass: '',
      stuIntroduction: '',
      isGroup: '',
      isGender: [false, false],
    },

    // default groupIndex
    groupIndex: 1,

    //供选择的学院
    stuAcademyArr: ['计算机学院', '信息工程学院', '自动化学院', '机电工程学院', '材料与能源学院', '轻工化工学院', '土木与交通工程学院', '物理与光电工程学院', '环境科学与工程学院', '外国语学院'],
    // 选择学院索引
    stuAcademyIndex: 0,
    //供选择的班级
    stuClassArr: [],
    //选择班级索引
    stuClassIndex: 0,
    //是否已经报名
    isSign: '0',
    //是否提交
    isSubmit: false,
    //是否确认提交
    isConfirm: false,
  },
  //所有班级
  allClassArr: [
    ['人工智能1班', '人工智能2班', '计算机类1班', '计算机类2班', '计算机类3班', '计算机类4班', '计算机类5班', '计算机类6班', '计算机类7班', '计算机类8班', '计算机类9班', '计算机类10班', '计算机类11班', '计算机类12班', '计算机类13班', '计算机类14班', '计算机类15班', '计算机类16班', '计算机类17班'],
    ['电子信息类1班', '电子信息类2班', '电子信息类3班', '电子信息类4班', '电子信息类5班', '电子信息类6班', '电子信息类7班', '电子信息类8班', '电子信息类9班', '电子信息类10班', '电子信息类11班', '电子信息类12班', '电子信息类13班', ],
    ['物联网工程1班', '物联网工程2班', '数据科学与大数据技术1班', '数据科学与大数据技术2班', '自动化类1班', '自动化类2班', '自动化类3班', '自动化类4班', '自动化类5班', '自动化类6班', '自动化类7班', '电气工程及其自动化1班', '电气工程及其自动化2班', '电气工程及其自动化3班', '电气工程及其自动化4班', '电气工程及其自动化5班', '电气工程及其自动化6班'],
    ['机械电子工程', '智能制造工程', '工业工程', '测控技术与仪器1班', '测控技术与仪器2班', '机械类1班', '机械类2班', '机械类3班', '机械类4班', '机械类5班', '机械类6班', '机械类7班', '机械类8班', '机械类9班', '机械类10班', '机械类11班', '机械类12班', '机械类13班'],
    ['微电子科学与工程1班', '微电子科学与工程2班', '材料成型及控制工程1班', '材料成型及控制工程2班', '能源动力类1班', '能源动力类2班', '能源动力类3班', '能源动力类4班', '能源动力类5班', '能源动力类6班', '材料类1班', '材料类2班', '材料类3班', '材料类4班', '材料类5班', '材料类6班', '材料类7班', '材料类8班'],
    ['化学工程与工艺', '食品科学与工程1班', '食品科学与工程2班', '应用化学1班', '应用化学2班', '化工与制药类1班', '化工与制药类2班', '化工与制药类3班', '化工与制药类4班', '化工与制药类5班'],
    ['交通运输', '测绘工程', '工程管理1班', '工程管理2班', '土木类1班', '土木类2班', '土木类3班', '土木类4班', '土木类5班', '土木类6班', '土木类7班', '土木类8班', '土木类9班', '土木类10班'],
    ['电子科学与技术1班', '电子科学与技术2班', '电子科学与技术3班', '电子科学与技术4班', '光电信息科学与工程1班', '光电信息科学与工程2班', '光电信息科学与工程3班', '光电信息科学与工程4班', '光电信息科学与工程5班'],
    ['安全工程', '环境科学与工程类1班', '环境科学与工程类2班', '环境科学与工程类3班', '环境科学与工程类4班'],
    ['日语', '外国语言文学类1班', '外国语言文学类2班', '外国语言文学类3班', '外国语言文学类4班', '外国语言文学类5班'],
  ],
  //待提交用户数据
  user: {},
  // 表单输入格式错误类型
  errorRex: '',
  //待获取openID
  openId: '',
  //请求 节流阀
  flag: true,
  cookie: '',
  session: '',
  onLoad() {
    // get isShowPost
    const showPost = wx.getStorageSync('isShowPost')

    this.openId = wx.getStorageSync('openId');
    const isSign = wx.getStorageSync('ifsign')
    this.setData({
      isSign,
      //设置默认班级
      stuClassArr: this.allClassArr[this.data.stuAcademyIndex],
      showPost
    });
  },
  onShow() {
    // 获取域名
    const app = getApp();
    const {
      baseUrl,
      groupIndex
    } = app.globalData;
    // console.log('groupIndex', groupIndex);
    this.setData({
      groupIndex
    })
    wx.login({
      success: res => {
        wx.request({
          url: baseUrl + '/stuUser/getOpenId?code=' + res.code,
          success: e => {
            console.log(e);
            wx.setStorageSync('cookie', e.cookies[0]);
            wx.setStorageSync('session', e.data.data[0].session_key)
            if (e.data.msg === "无报名信息") {
              this.setData({
                isSign: 0
              });
              wx.setStorageSync('ifsign', 0)
            }
          },
          fail(e) {
            wx.showToast({
              title: '请重新进入！',
              icon: 'error',
              duration: 1500
            })
          }
        })
      }
    })
  },
  // 提交表单验证
  formSubmit(e) {
    console.log('提交', e);
    // 获取表单数据对象
    const user = JSON.parse(JSON.stringify(e.detail.value));
    for (let k in user) {
      user[k] = user[k].trim()
    }
    // 数据数组
    const userArr = Object.values(user);
    // 判断是否为空
    if (userArr.some(item => item === '')) {
      wx.showToast({
        title: '请填写所有项',
        icon: 'error',
        image: '',
        duration: 1500,
        mask: true,
        success: (result) => {

        },
      });
      return;
    }
    // 验证表单
    if (this.isRex(user)) {
      wx.showToast({
        title: this.errorRex,
        icon: 'error',
        image: '',
        duration: 1500,
        mask: true,
        success: (result) => {

        },
      });
      return
    }
    this.user = JSON.parse(JSON.stringify(user));

    const {
      stuAcademyArr,
      stuAcademyIndex,
      stuClassArr,
      stuClassIndex
    } = this.data;
    //赋值待提交的用户学院
    this.user.stuAcademy = stuAcademyArr[stuAcademyIndex];
    //赋值待提交的用户班级
    this.user.stuClass = stuClassArr[stuClassIndex];
    console.log(this.user);
    //去除用户姓名、自我介绍表情
    this.user.stuIntroduction = this.user.stuIntroduction.replace(/[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/g, '');
    this.user.stuName = this.user.stuName.replace(/[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/g, '');
    this.setData({
      isSubmit: true
    })
  },

  // 验证表单正则函数
  isRex(obj) {
    const isStuName = /^[\u4E00-\u9FA5\uf900-\ufa2d]{1,}[\u4E00-\u9FA5\uf900-\ufa2d(·|•)s]{0,18}[\u4E00-\u9FA5\uf900-\ufa2d]{1,}$/;
    const isSutNum = /^(312100|322100)\d{4}$/;
    const isStuPhone = /^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/;
    if (!isStuName.test(obj.stuName)) {
      this.errorRex = '姓名格式不对';
      console.log(this.errorRex);;
      return true
    }
    if (!isSutNum.test(obj.stuId)) {
      this.errorRex = '学号格式不对';
      return true;
    }
    if (!isStuPhone.test(obj.stuPhone)) {
      this.errorRex = '手机号格式不对';
      return true;
    }
  },
  //防遮罩层底部滚动
  preventTouchMove: function () {

  },
  // 取消提交表单函数
  handlecancle() {
    this.setData({
      isSubmit: false
    })
  },
  // 确认提交表单发送请求
  handleconfirm() {
    // 获取域名
    const app = getApp();
    const baseUrl = app.globalData.baseUrl;
    if (this.flag === true) {
      this.flag = false;
      wx.request({
        url: baseUrl + '/stuUser/postInformation',
        data: {
          openId: this.openId,
          stuId: this.user.stuId,
          stuName: this.user.stuName,
          stuSex: this.user.stuSex,
          stuPhone: this.user.stuPhone,
          stuAcademy: this.user.stuAcademy,
          stuClass: this.user.stuClass,
          stuDirection: this.user.stuDirection,
          stuIntroduction: this.user.stuIntroduction,
        },
        method: 'POST',
        header: {
          "Content-Type": "application/json",
          "cookie": wx.getStorageSync('cookie'),
          "session": wx.getStorageSync('session')
        },
        timeout: 10000,
        success: (result) => {
          console.log(result);
          //判断学号是否已经被报名
          if (result.data.code != 200) {
            this.setData({
              isSubmit: false
            })
            wx.showModal({
              title: '报名失败',
              content: result.data.msg,
              showCancel: false,
              confirmText: '确定',
              confirmColor: '#206bab',
            });
            return
          }
          // 登录,重新缓存cookie session
          wx.login({
            success: res => {
              wx.request({
                url: baseUrl + '/stuUser/getOpenId?code=' + res.code,
                success: e => {
                  wx.setStorageSync('cookie', e.cookies[0]);
                  wx.setStorageSync('session', e.data.data[0].session_key)
                },
                fail(e) {
                  wx.showToast({
                    title: '请重新进入！',
                    icon: 'error',
                    duration: 1500
                  })
                }
              })
            }
          })
          // 提交成功清空表单
          const userReset = JSON.parse(JSON.stringify(this.data.user));
          this.setData({
            user: userReset,
            isSubmit: false,
            isConfirm: true,
          });
          // 设置缓存中的报名为‘是’
          wx.setStorageSync('ifsign', 1);

          let that = this;
          let timer = setTimeout(() => {
            wx.switchTab({
              url: '/pages/index/index',
              success: function (res) {
                // 设置页面中 报名为‘是’  
                that.setData({
                  isSign: '1'
                });
                timer = null;
              }
            })
          }, 1500)
        },
        fail: (error) => {
          wx.showModal({
            title: '请重试',
            content: '网络出了点状况',
            showCancel: false,
            confirmText: '确定',
            confirmColor: '#206bab',
          })
        },
        complete: () => {
          this.flag = true;
        }
      });
    }
  },
  // 改变学院处理
  bindAcademyChange: function (e) {
    const index = e.detail.value;
    //改变学院索引、班级数组
    this.setData({
      stuAcademyIndex: index,
      stuClassArr: this.allClassArr[index],
      stuClassIndex: 0 //重置班级索引
    })
  },
  // 改变班级处理
  bindClassChange: function (e) {
    console.log(e);
    //改变班级索引
    this.setData({
      stuClassIndex: e.detail.value
    })
  },

  //确定性别
  bindConfirmSex(e) {
    const value = e.detail.value[1];
    const {
      isGender
    } = this.data.user;
    if (value == '1') {
      isGender[0] = true;
      isGender[1] = false;
    } else if (value == '2') {
      isGender[0] = false;
      isGender[1] = true;
    } else {
      isGender[0] = false;
      isGender[1] = false;
    }
    this.setData({
      'user.isGender': isGender
    })
  }
})